package com.bobby.pojo;

import java.math.BigDecimal;
import java.util.*;

/**
 * @Description 购物车对象
 * @Date 2020/8/16 9:31
 * @Created wenjunpei
 */
public class Cart {
    // 总商品数量
    private Integer totalCount;
    // 总商品金额
    private BigDecimal totalPrice ;
    //购物车商品
    private LinkedHashMap<Integer,CartItem> cartItemMap = new LinkedHashMap<>();

    /*
     * @Description 添加商品项
     * @param cartItem
     * @return void
     * @date 2020/8/16 9:39
     * @auther wenjunpei
     */
    public void addItem(CartItem cartItem) {
        CartItem item = cartItemMap.get(cartItem.getId());
        if(item == null) {
            cartItemMap.put(cartItem.getId(),cartItem);
            return;
        }
        item.setCount(item.getCount() + cartItem.getCount());
        item.setTotalPrice(item.getPrice().multiply(new BigDecimal(item.getCount())));
    }

    /*
     * @Description 删除商品项
     * @param id
     * @return void
     * @date 2020/8/16 9:40
     * @auther wenjunpei
     */
    public boolean deleteItem(Integer id) {
        CartItem cartItem = cartItemMap.get(id);
        if(cartItem == null){
            return  false;
        }
        cartItemMap.remove(id);
        return true;
    }

    /*
     * @Description 清空购物车
     * @param
     * @return void
     * @date 2020/8/16 9:45
     * @auther wenjunpei
     */
    public void clear() {
        cartItemMap.clear();
    }

    /*
     * @Description 修改商品数量
     * @param id
     * @param count
     * @return boolean
     * @date 2020/8/16 9:48
     * @auther wenjunpei
     */
    public boolean updateCount(Integer id,Integer count) {
        CartItem cartItem = cartItemMap.get(id);
        if(cartItem == null) {
            return false;
        }
        cartItem.setCount(count);
        cartItem.setTotalPrice(cartItem.getPrice().multiply(new BigDecimal(cartItem.getCount())));
        cartItemMap.replace(id,cartItem);
        return true;
    }


    public Integer getTotalCount() {
        totalCount = 0;
        for(Map.Entry<Integer,CartItem> cartItemEntry : cartItemMap.entrySet()) {
            CartItem value = cartItemEntry.getValue();
            Integer count = value.getCount();
            totalCount += count;
        }
        return totalCount;
    }


    public BigDecimal getTotalPrice() {
         totalPrice = new BigDecimal(0);
        for(Map.Entry<Integer,CartItem> cartItemEntry : cartItemMap.entrySet()) {
            CartItem value = cartItemEntry.getValue();
            totalPrice = totalPrice.add(value.getTotalPrice());
        }
        return totalPrice;
    }



    public LinkedHashMap<Integer, CartItem> getCartItemMap() {
        return cartItemMap;
    }

    public void setCartItemMap(LinkedHashMap<Integer, CartItem> cartItemMap) {
        this.cartItemMap = cartItemMap;
    }

    public Cart(Integer totalCount, BigDecimal totalPrice, LinkedHashMap<Integer, CartItem> cartItemMap) {
        this.totalCount = totalCount;
        this.totalPrice = totalPrice;
        this.cartItemMap = cartItemMap;
    }

    public Cart() {
    }

    @Override
    public String toString() {
        return "Cart{" +
                "totalCount=" + getTotalCount() +
                ", totalPrice=" + getTotalPrice() +
                ", cartItemMap=" + cartItemMap +
                '}';
    }
}
